In a partitioned environment, a computing unit, such as a server, is partitioned into a plurality of partitions to create smaller independent systems within the computing unit. Partitioning is becoming popular as multiple smaller servers are consolidated into one or more bigger servers with multiple partitions. This consolidation provides better resource utilization, centralized management and greater flexibility, as customers are able to instantiate new servers/partitions more easily. Typically, one operating system (OS) instance runs in each partition, and the operating system instance either has its own dedicated I/O adapters, or it is able to share I/O adapters through specific techniques.
For example, an operating system may allow sharing of one or more adapters it owns via an interface to other partitions. This requires the operating system to be configured to enable sharing, which is frequently complex. Further, this technique is not robust, since other applications can run in the open partition; operating systems are not tailored for the purpose of sharing I/O adapters. Other shortcomings include security concerns, as well as timing concerns (e.g., dependencies between partitions for start-up and shutdown).
In a further example, sharing is provided through the use of specialized hardware that owns one or more adapters. This, however, increases system hardware costs, increases development costs by requiring the hardware to be built and integrated with industry I/O adapters, has a long development cycle for new I/O adapters, and unique I/O adapter sharing configuration.
Dedicated I/O adapters in each partition are expensive due to the cost of the adapters, slots, cabling, etc.; complex to manage/maintain; and typically underutilized, since utilization drops with an ever increasing number of partitions. Further, in both sharing cases described above, adding a partition and assigning virtual I/O (sharing an adapter owned elsewhere) requires configuration in multiple places with different tools.
Moreover, new I/O adapters are constantly being created. Dedicating them to individual operating systems requires that each operating system develop drivers and qualify the adapter. If they need to be shared, sharing code needs to be developed for each operating system.
As a multiple logical partitioned server grows in size, the number of logical partitions, i.e., operating system instances, grows proportionally. This places additional demands on the number of I/O adapters supported based on the number each operating system needs for bandwidth, availability and latency. The cost of supporting these increasing numbers of dedicated adapters is incurred both in development and in the cost that is passed on to the customer.
Today's on-demand environment requires efficiency from a development perspective for server manufacturers, and from a total cost of ownership perspective for information technology (IT) consumers. Time to market is also a critical criterion for success for both server manufacturers and IT consumers who have to deliver computing and applications within a window of opportunity. Thus, a need exists for an enhanced capability to facilitate sharing of I/O resources. In particular, a need exists for a capability that facilitates access to I/O resources of a partitioned environment.